home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / cdc / src / cdrc.c < prev    next >
Text File  |  1997-05-28  |  30KB  |  1,132 lines

  1. #define        TrkMax 1024
  2. #define        PrgMax 256
  3. #include    "_TNB.c"
  4. #include    "CDC_CLIB.H"
  5.  
  6. #define        __DOS_INLINE__
  7. #include    <SYS\DOS.H>
  8. #define        __IOCS_INLINE__
  9. #include    <SYS\IOCS.H>
  10.  
  11. #define        UNchar        unsigned char
  12. #define        UNshort        unsigned short
  13. #define        UNint        unsigned int
  14. extern    short    CdcMode;    // 0:停止中 1:運転中
  15. extern    int    ST_CHK;        // !=0 ; 常駐
  16. extern    int    SCSI_ID;
  17. extern    int    SCSI_IDF;
  18. extern    UNchar    SCSI_LUN;
  19. extern    UNshort    SCSI_LUN__;
  20. extern    short    SCSI_BANKID;
  21. extern    short    SCSI_IDSW;
  22. extern    short    PLAYSCSTS;    // 1;STSIN待ち 0;待たず
  23. extern    short    PLAYSCCAL;    // 1;演奏中極力 SCSI コールをしない
  24. extern    short    CddevSw;        //0: SCSI直接 1:計測IOCTRL
  25. extern    short    CddDrvNo;        //計測IOCTRL用ドライヴNO
  26. extern    short    AutoMode;    // 0:ノーマル 1:オート(含loop)
  27. extern    short    RndMode;    // 0:ノーマル 1:ランダム
  28. extern    short    MemMode;    // 0:ノーマル 1:メモリー
  29. extern    short    DisMode;    //0;ノーマル 1;表示させない
  30.  
  31. extern    short    MemLong;    // メモリながさ 0以外ならMEMORY
  32. extern    short    MemPt;        // メモリポインタ
  33. extern    UNchar    MemSock[];    // メモリ
  34. extern    short    TrkNo;        // 演奏中 トラックナンバー/メモリポインタ
  35. extern    short    PauseMode;    // 0:特に 1:ポーズ中
  36. extern    short    ExTrak;        // 1;拡張トラックあり
  37. extern    short    CeTrak;        // 1;中間曲名あり
  38. extern    short    MD_SeqSecTrak;    // 1;MD セパレートトラック有り
  39. extern    short    MD_MonoTrak;    // -1;MONOトラックのみ,1;有り(禁止),0;なし
  40. extern    short    MD_PlayOnly;    //  0;録再MEDIA 1;再生専用MEDIA
  41.  
  42. extern    short    CDIN;        //0:CDは入っていない 1:入っている
  43. extern    int    CdListS;    //CDLISTにあるなら 1 
  44. extern    int    CdcTrak;    // 
  45. extern    int    CdTrak;        // 
  46. extern    int    CdLong;        // 長さ
  47. extern    char    CdName[40];    // CD名
  48. //extern    char    ListName[TrkMax][40];    // 名前
  49. //extern    int    ListLong[TrkMax];    // ながさ時間
  50. //extern    int    ListStTm[TrkMax];    // スタート時間
  51. extern    char    (*pListName)[][40];    // 名前
  52. extern    int    (*pListLong)[];    // ながさ時間
  53. extern    int    (*pListStTm)[];    // スタート時間
  54.  
  55. extern    int    O_CdTrak;        // 
  56. extern    int    O_ListStTm[100];    // スタート時間
  57. extern    int    O_ListLong[100];    // ながさ時間
  58. extern    UNchar    TitleTy[9];
  59.  
  60. extern    int    SCSI_ROMB;
  61. extern    short    CddevSw;    //  0: SCSI直接 1:計測IOCTRL
  62. extern    short    LUN_MAX;    // 多連装数
  63. extern    short    SWPD;        //  /pdがある?
  64. extern    short    TestunitSw;    //  /u[n]のモード 0;演奏中未挿入 1;そのまま
  65.  
  66. extern    short    OvTrak;        //  1;トラックが足りなかった
  67. extern    short    ExTrak;        //  1;拡張トラックあり
  68. extern    short    PlyWitT;    //  Play後の待ちタイム
  69. extern    short    KeyTDCT;    //  カウント 1/100s
  70.  
  71. extern    short    PlyWitT;    // 演奏開始後の待ち間隔
  72. extern    short    KeyTDCT;    // 演奏中の割り込み間隔
  73. extern    short    NoPlWitT;    // 演奏中でない時の割り込み間隔
  74. extern    short    STFLAG;        //  常駐チェック用
  75. extern    short    MuTmMod;    //  0:ノーマル 1:強引にキーベクタを書き替え
  76.  
  77. extern    short    AutoMode;    //  0:ノーマル 1:オート
  78. extern    short    RndMode;    //  0:ノーマル 1:ランダム
  79. extern    short    ReptMode;    //  0:ノーマル 1:リピート
  80. extern    short    BgmMode;    //  0:ノーマル 1:BGM
  81. extern    short    CmdC_Mod;    //  /b[n]
  82.  
  83. extern    short    Volum;        //  /v[n]
  84. extern    short    MastVol;    //  /vm[n]
  85. extern    UNchar    DiSwc;        //  /di[n]
  86. extern    UNchar    DiSwc_;        //  /di[n]
  87.  
  88. extern    short    DeviType;
  89.  
  90. extern    short    JukeBox;    // 0:ノーマル 1:JukeBox
  91. extern    short    TwsFlg;        // TWOSCSI フラグ -2 なら PHASE 気を付ける
  92.  
  93. /*------------------------------*/
  94. /*    構造体            */
  95. /*------------------------------*/
  96. typedef struct {
  97.     int    fg;            /* 状態 0x11 演奏中,0x12 演奏中断 */
  98.     int    track_no;        /* 曲番号 */
  99.     int    time;            /* 現在の演奏時間 */
  100.     int    address;        /* 演奏アドレス */
  101.     int    track_long;        /* 演奏中の曲のながさ*/
  102. } PLYINF;
  103. extern    PLYINF plyinf;
  104.  
  105. /**************************************
  106.     一曲だけ演奏する。
  107.     [何番演奏する]
  108. ****************************************/
  109. void    cd_play( int start, int end )
  110. {
  111. int    i;
  112. NoStMDS();
  113. if ( start<0 ){
  114.     if ( (i=CdPlay_all())<0 )
  115.         if ( (i=CdPlay_all())<0 )
  116.             i=CdPlay_all();
  117. } else {
  118.     if ( (i=CdPlay( start,end ))<0 )
  119.         if ( (i=CdPlay( start,end ))<0 )
  120.             i=CdPlay( start,end );
  121. }
  122. if ( i==-1 ){
  123.     fprintf_(1,"Start Track Address or ReadTOC Command error.\r\n");
  124. } else if ( i==-2 ){
  125.     fprintf_(1,"Play Audio Begin ・ Play Audio Block Count Command error.\r\n");
  126. } else if ( i==-3 ){
  127.     fprintf_(1,"Start Track Address or ReadTOC Command error.\r\n");
  128. } else if ( i==-4 ){
  129.     fprintf_(1,"指定された曲番号は存在しません。\r\n" );
  130. } else if ( i==-5 ){
  131.     fprintf_(1,"Leadout Track Address or ReadTOC Command error.\r\n");
  132. } else if ( i==-100 ){
  133.     PrintScsiId();    //SCSI-ID表示
  134.     fprintf_(1," の装置は、CD-ROM ではないようです。\r\n" );
  135. }
  136. }
  137. /************************************
  138.     演奏を再開させる
  139. ************************************/
  140. void    cd_play_re( void )
  141. {
  142. char    *s;
  143. PLYINF plyinf2;
  144. if ( CddevSw==0 ){    //0: SCSI直接 1:計測IOCTRL
  145.     if( ChkPly( &plyinf2 )!=0 ){
  146.         s="Read Drive Status Command error.\r\n";
  147.     } else if( ChkPly( &plyinf2 )!=0 ){
  148.         s="Read Drive Status Command error.\r\n";
  149.     } else if ( plyinf2.fg==0x12 ){    //12=中断 11=演奏
  150.         if( Resume() == 0 )
  151.             s="演奏を再開します。\r\n";
  152.         else    s="Resume Command error.\r\n";
  153.     } else {
  154.         s="演奏は一時停止されていません。\r\n";
  155.     }
  156. } else {
  157.     if ( PauseMode==0 ){            //0:特に 1:ポーズ中
  158.         s="演奏は一時停止されていません。\r\n";
  159.     } else {
  160.         s="演奏を再開します。\r\n";
  161.         Resume();
  162.     }
  163. }
  164. fprintf_(1,s);
  165. }
  166. /************************************
  167.     演奏を中断する
  168. *************************************/
  169. void cd_play_pause( void )
  170. {
  171. char    *s;
  172. PLYINF plyinf2;
  173. if( ChkPly( &plyinf2 )!=0 ){
  174.     s="Read Drive Status Command error.\r\n";
  175. } else if( ChkPly( &plyinf2 )!=0 ){
  176.     s="Read Drive Status Command error.\r\n";
  177. } else if ( plyinf2.fg==0x11 ){    //12=中断 11=演奏
  178.     if( StpDsk() == 0 )
  179.         s="演奏を中断します。\r\n";
  180.     else    s="Pause Command error.\r\n";
  181. } else if ( plyinf2.fg==0x12 ){    //12=中断 11=演奏
  182.     s="既に一時停止されてます。\r\n";
  183. } else {
  184.     s="演奏していません。\r\n";
  185. }
  186. fprintf_(1,s);
  187. }
  188. /************************************
  189.     CD-ROM チェック
  190. *************************************/
  191. int    CDRM_CHK()
  192. {
  193. int    i;
  194. if ( (i=CDROM_chk()) ){
  195.     PrintScsiId();    //SCSI-ID表示
  196.     if ( i==-1 )
  197.         fprintf_(1," の装置は、CD-ROM ではないようです。\r\n");
  198.     else if ( i==-2 )
  199.         fprintf_(1," の CD-ROM が準備されていません。\r\n");
  200.     else    fprintf_(1," の装置は、現在動作不可能です。\r\n");
  201.     return(-1);
  202. }
  203. return(0);
  204. }
  205. /************************************
  206.     計測CD-DRIVEチェック
  207. *************************************/
  208. int    Chk_Cdd(int bb)
  209. {
  210. int    i;
  211. struct    _dpbptr    dpb;
  212. CddDrvNo=0;
  213. if ( bb == 0) {
  214.     for(i=1;i<=26;i++){
  215.         if ( _dos_getdpb(i,&dpb)==-14 ){
  216.             CddDrvNo = i;
  217.             break;
  218.         }
  219.     }
  220.     if ( CddDrvNo == 0) {
  221.         /* CD-ROMドライブが見つからない */
  222.         fprintf_(1,"CD-ROMドライヴが見つけられません。\r\n" );
  223.         return(-1);
  224.     }
  225. } else {
  226.     if ( _dos_getdpb(bb,&dpb)!=-14 ){
  227.         fprintf_(1,"指定ドライヴはCD-ROMではありません。\r\n" );
  228.         return(-1);
  229.     }
  230.     CddDrvNo=bb;
  231. }
  232. //fprintf_(1,"CD-ROMドライヴ = %2\r\n",CddDrvNo );
  233. CddevSw=1;        //0: SCSI直接 1:計測IOCTRL
  234. return(0);
  235. }
  236. /**************************************
  237.     メモリ状態を表示する。
  238. ***************************************/
  239. void cd_mem_list()
  240. {
  241. int    i,j,m,t;
  242. char    *s;
  243. if ( CDRM_CHK() )
  244.     return;
  245. if ( MemLong==0 ){
  246.     fprintf_(1," プログラムされていません\r\n");
  247.     return;
  248. }
  249. t=0;
  250. for(i=0;i<MemLong;i++){
  251.     m=MemSock[i];    // メモリ
  252.     t=addtime_(t,(*pListLong)[m]);
  253. }
  254. if ( t<0x640000 ){
  255.     fprintf_(1,"\r\n  総演奏時間(%2\'%2\"%2)\t",
  256.             (t>>16)&0xFF,
  257.             (t>> 8)&0xFF,
  258.              t&0xFF        //DIVU(MULU( end&0xFF,99),74)
  259.         );
  260. } else {
  261.     fprintf_(1,"\r\n  総演奏時間(%3\'%2\"%2)\t",
  262.             (t>>16)&0xFFF,
  263.             (t>> 8)&0xFF,
  264.              t&0xFF        //DIVU(MULU( end&0xFF,99),74)
  265.         );
  266. }
  267. if ( CdName[0]!=0 )
  268.     fprintf_(1,NameCenter(CdName,0));
  269. fprintf_(1,"\r\n\r\n            演奏時間\r\n");
  270. for(i=0;i<MemLong;i++){
  271.     m=MemSock[i];    // メモリ
  272.     if ( CdTrak<100 )
  273.         s=" %2. [%2]  %2\'%2\"%2\t";
  274.     else    s=" %3. [%3]  %2\'%2\"%2\t";
  275.     fprintf_(1,s,i+1,m,
  276.         ( (*pListLong)[m] >>16)&0xFF,
  277.         ( (*pListLong)[m] >> 8)&0xFF,
  278.           (*pListLong)[m]&0xFF        //DIVU(MULU( (*pListLong)[m]&0xFF,99),74)
  279.     );
  280.     fprintf_(1,NameCenter((*pListName)[m],(*pListStTm)[m]));    // 名前
  281.     fprintf_(1,"\r\n");
  282. }
  283. fprintf_(1,"\r\n");
  284. }
  285. /**************************************
  286.     CD総時間を環境変数に設定する
  287. **************************************/
  288. void    CdTotalEnvSet()
  289. {
  290. UNchar    buf[256];
  291. int    i;
  292. if ( CDIN==0 || CdLong==0 || JukeBox!=0 ){//0:CDは入っていない 1:入っている
  293.     MatherEnvSet("CDCIN",0);
  294.     //_dos_setenv("CDCIN",0,0);
  295.     return;
  296. }
  297. #define strcpy_(DES,SRC)        \
  298. do {    char *_d = (char *)(DES);    \
  299.     char *_s = (char *)(SRC);    \
  300.     while (*_d ++ = *_s ++);    \
  301. } while (0)
  302.     //   0123456789
  303. strcpy_(buf,"(%2:%2:%2)");
  304. i=(CdLong>>16)&0xFF,
  305. buf[1]='0'+DIVU(i,10);
  306. buf[2]='0'+MODU(i,10);
  307. i=(CdLong>> 8)&0xFF,
  308. buf[4]='0'+DIVU(i,10);
  309. buf[5]='0'+MODU(i,10);
  310. i=(CdLong    )&0xFF,
  311. buf[7]='0'+DIVU(i,10);
  312. buf[8]='0'+MODU(i,10);
  313. MatherEnvSet("CDCIN",buf);
  314. //_dos_setenv("CDCIN",0,buf);
  315. }
  316. /**************************************
  317.     演奏時間を表示する。
  318.  
  319.     ff=0 ; -L
  320.     ff=1 ; -L1
  321.     ff=2 ; -L2
  322.  
  323.     [タイトルリスト用ファイル]
  324. ***************************************/
  325. void cd_play_list( ff )
  326. int    ff;
  327. {
  328. int i,j,m,n,l,leadout_address,min,max,start,end,cnt;
  329. char    *s;
  330. if ( CDIN==0 )    //0:CDは入っていない 1:入っている
  331.     return;
  332. min=1;
  333. max=CdTrak;
  334. leadout_address=CdLong;
  335. for(i=min;i<=max;i++){
  336.     if( i==min ){    //はじめ
  337.         end = leadout_address;
  338.         if ( end<0x640000 ){
  339.             fprintf_(1,"\r\n  総演奏時間(%2\'%2\"%2)\t",
  340.                     (end>>16)&0xFF,
  341.                     (end>> 8)&0xFF,
  342.                      end&0xFF        //DIVU(MULU( end&0xFF,99),74)
  343.                 );
  344.         } else {
  345.             fprintf_(1,"\r\n  総演奏時間(%3\'%2\"%2)\t",
  346.                     (end>>16)&0xFFF,
  347.                     (end>> 8)&0xFF,
  348.                      end&0xFF        //DIVU(MULU( end&0xFF,99),74)
  349.                 );
  350.         }
  351.         if ( ff!=0 )
  352.             fprintf_(1,"\t\t");
  353.         if ( CdName[0]!=0 ){
  354.             fprintf_(1,NameCenter(CdName,0));
  355.         } else if ( DeviType==0x10 ){
  356.             UNchar    buf[64];
  357.             if ( GetTrackName( 0,buf )==0 )
  358.                 fprintf_(1,NameCenter(buf,0));
  359.         }
  360.         if ( ff==0 )
  361.             fprintf_(1,"\r\n\r\n       演奏時間\r\n");
  362.         else    fprintf_(1,"\r\n\r\n       演奏時間  開始時間    終了時間\r\n");
  363.     }
  364.     start = (*pListStTm)[i];    // スタート時間
  365.     cnt = (*pListLong)[i];    // 長さ時間
  366.     end = addtime( (*pListStTm)[i],(*pListLong)[i] );
  367.     end = subtime( end,1 );
  368.     if ( CdTrak<100 )
  369.         s=" [%2] ";
  370.     else    s=" [%3]";
  371.     fprintf_(1,s,i);
  372.     if ( start<0 )
  373.         fprintf_(1,"*");
  374.     else if ( (start&0x40000000)!=0 )
  375.         fprintf_(1,"・");
  376.     else    fprintf_(1," ");
  377.     if ( ff==0 )
  378.         s="%2\'%2\"%2\t\t";
  379.     else    s="%2\'%2\"%2  %2\'%2\"%2 ~ %2\'%2\"%2\t";
  380.     fprintf_(1,s,
  381.         ( cnt >>16)&0xFF,
  382.         ( cnt >> 8)&0xFF,
  383.           cnt&0xFF,            //DIVU(MULU( cnt&0xFF,99),74),
  384.         (start>>16)&0xFF,
  385.         (start>> 8)&0xFF,
  386.          start&0xFF,            //DIVU(MULU( start&0xFF,99),74),
  387.         ( end >>16)&0xFF,
  388.         ( end >> 8)&0xFF,
  389.           end&0xFF            //DIVU(MULU( end&0xFF,99),74)
  390.     );
  391.     if ( (*pListName)[i][0]!=0 ){
  392.         fprintf_(1,NameCenter((*pListName)[i],(*pListStTm)[i]));    // 名前
  393.     } else if ( DeviType==0x10 ){
  394.         UNchar    buf[64];
  395.         if ( GetTrackName( i,buf )==0 )
  396.             fprintf_(1,NameCenter(buf,0));
  397.     }
  398.     fprintf_(1,"\r\n");
  399.     if ( ff==2 ){
  400.         //拡張ネーム
  401.         for(l=CdcTrak-1;l>CdTrak;l--){
  402.             n=(*pListLong)[l];
  403.             if ( (n&0xFF0000)==0xFF0000 && (n&0xFF)==i ){
  404.                 if ( ff==0 )
  405.                     s="\t(%2\'%2\"%2)~\t";
  406.                 else    s="\t\t(%2\'%2\"%2)~\t\t";
  407.                 fprintf_(1,s,
  408.                     ( (*pListStTm)[l] >>16)&0xFF,
  409.                     ( (*pListStTm)[l] >> 8)&0xFF,
  410.                       (*pListStTm)[l]&0xFF    //DIVU(MULU( (*pListStTm)[l]&0xFF,99),74)
  411.                 );
  412.                 fprintf_(1,NameCenter(&(*pListName)[l][2],(*pListStTm)[i]));
  413.                 fprintf_(1,"\r\n");
  414.             }
  415.         }
  416.     }
  417. }
  418. fprintf_(1,"\r\n");
  419. }
  420. /**************************************
  421. 演奏時間を表示する(CDタイトルのみ)。
  422.  
  423. ***************************************/
  424. void cd_play_listl()
  425. {
  426. int    i,j,lc,end,jb;
  427. int    lm,ssp;
  428. ssp=_iocs_b_super(0);            // スレッド移動を抑える?!
  429. lc=LUN_MAX;
  430. jb=JukeBox;    // 0:ノーマル 1:JukeBox
  431. JukeBox=0;    // 0:ノーマル 1:JukeBox
  432. if ( LUN_MAX==0 )
  433.     lc=1;
  434. for(lm=0;lm<lc;lm++){
  435.     fprintf_(1,"\r\n");
  436.     if ( LUN_MAX!=0 ){
  437.         SetLUN_(lm);
  438.         fprintf_(1," Tray[%1]  ",lm+1);
  439.     }
  440.     CDIN=0;
  441.     CdLong=0;
  442.     for(i=0;i<3;i++){
  443.         if ( CDROM_chk() )
  444.             continue;
  445.         CdListRead();    //チェック
  446.         if ( CDIN!=0 && CdLong!=0 )        //0:CDは入っていない 1:入っている
  447.             break;
  448.     }
  449.     if ( i>=3 ){
  450.         fprintf_(1,"      *NoDisc*");
  451.         continue;
  452.     }
  453.     end = CdLong;
  454.     fprintf_(1,"総演奏時間(%2\'%2\"%2)  曲数(%2)\t",
  455.             (end>>16)&0xFF,
  456.             (end>> 8)&0xFF,
  457.              end&0xFF,        //DIVU(MULU( end&0xFF,99),74)
  458.             CdTrak
  459.         );
  460.     if ( CdListS==0 ){
  461.         if ( DeviType!=0x10 ){
  462.             fprintf_(1,"            *未登録Disc*");
  463.         } else {
  464.             UNchar    buf[64];
  465.             if ( GetTrackName( 0,buf )==0 )
  466.                 fprintf_(1,NameCenter(buf,0));
  467.         }
  468.     } else {
  469.         if ( CdName[0]!=0 ){
  470.             fprintf_(1,NameCenter(CdName,0));
  471.         } else if ( DeviType==0x10 ){
  472.             UNchar    buf[64];
  473.             if ( GetTrackName( 0,buf )==0 )
  474.                 fprintf_(1,NameCenter(buf,0));
  475.         }
  476.     }
  477. }
  478. fprintf_(1,"\r\n\r\n");
  479. JukeBox=jb;    // 0:ノーマル 1:JukeBox
  480. if ( ssp>0 )
  481.     _iocs_b_super(ssp);
  482. }
  483. /**************************************
  484.     CDをtitlelistfileに登録する
  485.  
  486.     mo=0 ; ファイル -D1 (旧-LL)
  487.     mo=1 ; ファイル -D2
  488.  
  489.     [タイトルリスト用ファイル]
  490. ***************************************/
  491. void cd_play_entry( ff,mo )
  492. int    ff,mo;
  493. {
  494. int i,j,m,n,l,t,trc,ind;
  495. int leadout_address,min,max,start,end,cnt;
  496. char    *s;
  497. int    lst[100];
  498. int    lstl[256];
  499. if ( CDRM_CHK() )
  500.     return;
  501. if( RedTOC(&leadout_address,&min,&max)!=0 ){
  502.     if( RedTOC(&leadout_address,&min,&max)!=0 ){
  503.         fprintf_(1,"Leadout Track Address or ReadTOC Command error.\r\n");
  504.         return;
  505.     }
  506. }
  507. if ( max>CdcTrak ) max=CdcTrak;
  508. if ( Music_inf_all( min,max,lst,lstl ) ){
  509.     if ( Music_inf_all( min,max,lst,lstl ) ){
  510.         fprintf_(1,"Start Track Address or ReadTOC Command error.\r\n");
  511.         return;
  512.     }
  513. }
  514. lst[max+1]=leadout_address;
  515. if ( mo==0 || DeviType==0x10 ){
  516.     for(i=min;i<=max;i++){
  517.         if( i==min ){    //はじめ
  518.             end = leadout_address;
  519.             s=    "\t\t\t|                                  |\r\n"
  520.                 "    All (%2:%2:%2)\t";
  521.             fprintf_(ff,s,    (end>>16)&0xFF,
  522.                     (end>> 8)&0xFF,
  523.                      end     &0xFF
  524.                 );
  525.             if ( DeviType==0x10 ){
  526.                 UNchar    buf[64];
  527.                 if ( GetTrackName( 0,buf )==0 )
  528.                     fprintf_(ff,buf);
  529.             }
  530.             fprintf_(ff,"\r\n       演奏時間\r\n");
  531.         }
  532.         start = lst[i];    // スタート時間
  533.         if ( DeviType!=0x10 ){
  534.             end = subtime( lst[i+1],1 ); // エンド時間
  535.             cnt = subtime( end,subtime( start,1 ) );
  536.         } else {
  537.             cnt = lstl[i];        // 長さ
  538.             end = addtime( start,cnt );
  539.             end = subtime( end,1 );
  540.         }
  541.         fprintf_(ff," [%2]  %2\'%2\"%2\t\t",
  542.             i,
  543.             ( cnt >>16)&0xFF,
  544.             ( cnt >> 8)&0xFF,
  545.               cnt      &0xFF
  546.         );
  547.         if ( DeviType==0x10 ){
  548.             UNchar    buf[64];
  549.             if ( GetTrackName( i,buf )==0 )
  550.                 fprintf_(ff,buf);
  551.         }
  552.         fprintf_(ff,"\r\n");
  553.     }
  554.     fprintf_(ff,"    <>\r\n");
  555.     fprintf_(ff,"\r\n\x1A");
  556.     return;
  557. }
  558. //#define    MSF    0x1000000
  559. #define    MSF    0
  560. fprintf_(1,"\n\rindexも調べます。しばらくお待ちください。\n\r\n\r" );
  561. ZeroUnit();
  562. NoStMDS();
  563. fprintf_(1,"\ttrack は %2 個です。\n\r\n\r",max );
  564. for(trc=min;trc<=max;trc++){
  565.     if( trc==min ){    //はじめ
  566.         end = leadout_address;
  567.         s=    "\t\t\t|                                  |\r\n"
  568.             "    All (%2:%2:%2)\t\r\n"
  569.             "       演奏時間\r\n";
  570.         fprintf_(ff,s,    (end>>16)&0xFF,
  571.                 (end>> 8)&0xFF,
  572.                  end     &0xFF
  573.             );
  574.     }
  575.     start = lst[trc]&0xFFFFFF;    // スタート時間
  576.     end = subtime( lst[trc+1],1 );// エンド時間
  577.     cnt = subtime( end,subtime( start,1 ) );
  578.     fprintf_(ff," [%2]  %2\'%2\"%2\t\t\r\n",
  579.         trc,
  580.         ( cnt >>16)&0xFF,
  581.         ( cnt >> 8)&0xFF,
  582.           cnt      &0xFF
  583.     );
  584.  
  585.     if ( lst[trc]<0 )
  586.         continue;
  587.  
  588.     t = subtime( end,0x500 );//1秒前
  589.     if ( CdPlay(t+MSF,end+MSF)<0 ){
  590.         if ( CdPlay(t+MSF,end+MSF)<0 ){
  591.             fprintf_(1,"Play Audio Begin ・ Play Audio Block Count Command error\n");
  592.             break;
  593.         }
  594.     }
  595.     if ( ChkPly( &plyinf )!=0 ){
  596.         if ( ChkPly( &plyinf )!=0 ){
  597.             fprintf_(1,"Read Drive Status Command error.\r\n");
  598.             continue;
  599.         }
  600.     }
  601.     t=plyinf.track_no / 0x10000;
  602.     fprintf_(1,"\ttrack = %2 は index = %2 個です。\n\r",plyinf.track_no&0xFFFF,t );
  603.     if ( t==1 || t==0 ){
  604.         StpDsk();
  605.         WW(50);
  606.         continue;
  607.     }
  608.     fprintf_(1,"\t (.0)  00\'00\"00\r\n");
  609.     /*t個のindexがあることがわかる*/
  610.     for(ind=2;ind<=t;ind++){
  611.         j=start&0xFFFFFF;
  612.         for(;;){
  613.             if ( CdPlay(j+MSF,end+MSF)<0 ){
  614.                 if ( CdPlay(j+MSF,end+MSF)<0 ){
  615.                     fprintf_(1,"Play Audio Begin ・ Play Audio Block Count Command error\n");
  616.                     break;
  617.                 }
  618.             }
  619.             if ( ChkPly( &plyinf )!=0 ){
  620.                 if ( ChkPly( &plyinf )!=0 ){
  621.                     fprintf_(1,"Read Drive Status Command error.\r\n");
  622.                     continue;
  623.                 }
  624.             }
  625.             fprintf_(1,"\t (.%1)  %2\'%2\"00\r",
  626.                 ind-1,
  627.                 ( plyinf.time >>16)&0xFF,
  628.                 ( plyinf.time >> 8)&0xFF
  629.             );
  630.             i=plyinf.track_no / 0x10000;
  631.             if ( i==ind )
  632.                 break;
  633.             j=addtime( j,5*0x100 );//5秒すすめる
  634.             if ( j>end )
  635.                 break;
  636.         }
  637.         StpDsk();
  638.         if ( i!=ind )
  639.             break;
  640.         i=subtime( j,5*0x100 );//5秒戻す
  641.         if ( CdPlay(i+MSF,end+MSF)<0 ){
  642.             if ( CdPlay(i+MSF,end+MSF)<0 ){
  643.                 fprintf_(1,"Play Audio Begin ・ Play Audio Block Count Command error\n");
  644.                 break;
  645.             }
  646.         }
  647.         for(;;){
  648.             if ( ChkPly( &plyinf )!=0 ){
  649.                 if ( ChkPly( &plyinf )!=0 ){
  650.                     fprintf_(1,"Read Drive Status Command error.\r\n");
  651.                     continue;
  652.                 }
  653.             }
  654.             i=plyinf.track_no/0x10000;
  655.             if ( i==ind )
  656.                 break;
  657.         }
  658.         fprintf_(1,"\t (.%1)  %2\'%2\"%2\r\n",
  659.             ind-1,
  660.             ( plyinf.time >>16)&0xFF,
  661.             ( plyinf.time >> 8)&0xFF,
  662.               plyinf.time      &0xFF
  663.         );
  664.         fprintf_(ff," (.%1)  %2\'%2\"%2\t\t\r\n",
  665.             ind-1,
  666.             ( plyinf.time >>16)&0xFF,
  667.             ( plyinf.time >> 8)&0xFF,
  668.               plyinf.time      &0xFF
  669.         );
  670.         start=plyinf.address;
  671.         StpDsk();
  672.         WW(50);
  673.     }
  674. }
  675. fprintf_(ff,"    <>\r\n");
  676. fprintf_(ff,"\r\n\x1A");
  677. ZeroUnit();
  678. }
  679. /*+++++++*/
  680. void    WW(w)    // 1/100s
  681. {
  682. int    i;
  683. i=_iocs_ontime();
  684. for(;;){
  685.     if ( _iocs_ontime()>=i+w )
  686.         break;
  687. }
  688. }
  689. /**************************************
  690.     CDCHK.x 相当機能
  691. 終了 [esc]
  692. ***************************************/
  693. void    debug_mode()
  694. {
  695. int    i,j,m,n;
  696. struct    CDC_STAT_PTR *CSP;
  697. static    UNchar    HexS[16]="0123456789ABCDEF";
  698. static    UNchar    ss[6][6]={"無効","再生","停止","終了","エラ","なし"};
  699. unsigned char buf[32];
  700. int    stp=0;
  701. int    od_fg,od_trk,od_tim,om;
  702. //_Time100:
  703. int    ott;
  704. if ( (i=CDROM_chk()) ){
  705.     if ( i!=-2 ){
  706.         PrintScsiId();    //SCSI-ID表示
  707.         if ( i==-1 )
  708.             fprintf_(1," の装置は、CD-ROM ではないようです。\r\n");
  709.         else    fprintf_(1," の装置は、現在動作不可能です。\r\n");
  710.         return;
  711.     }
  712. }
  713. ott=Time100();
  714. m=0;
  715. for(;;){
  716.     if ( _dos_keysns() ){
  717.         i=_dos_inkey()&0xFF;
  718.         if ( i==0x1B || i=='q' || i=='Q' ){    //ESC
  719.             break;
  720.         } else if ( i==' ' ){
  721.             for(i=0;;){
  722.                 if ( _dos_keysns() ){
  723.                     i=_dos_inkey()&0xFF;
  724.                     break;
  725.                 }
  726.             }
  727.             if ( i==0x1B || i=='q' || i=='Q' )    //ESC
  728.                 break;
  729.         } else if ( i=='s' || i=='S' ){
  730.             stp=1;
  731.         } else {
  732.             stp=0;
  733.         }
  734.     }
  735.     if ( ChkPly( &plyinf )!=0 ){
  736.         fprintf_(1,"cdchk=-1");
  737.         if ( CddevSw ){        //0: SCSI直接 1:計測IOCTRL
  738.             cdd_ioctrl(0x8004,buf);
  739.             fprintf_(1,"  : (%2,%2)",buf[0],buf[1]);
  740.         }
  741.     } else {
  742.         //ChkPlyDisp();
  743.         if ( stp ){
  744.             if ( od_fg == plyinf.fg && od_trk == plyinf.track_no )
  745.                 continue;
  746.         }
  747.         switch( plyinf.fg ){
  748.          case(0x11):    i=1; break;
  749.          case(0x12):    i=2; break;
  750.          case(0x13):    i=3; break;
  751.          case(0x14):    i=4; break;
  752.          case(0x15):    i=5; break;
  753.          default:    i=0;
  754.         }
  755.         fprintf_(1,"cdchk= 0 : flag=");
  756.         _dos_fputs(ss[i],1);
  757.         _dos_fputc('(',1);
  758.         _dos_fputc(HexS[plyinf.fg/0x10],1);
  759.         _dos_fputc(HexS[plyinf.fg&0x0F],1);
  760.         CSP=CDC_STAT();
  761.         j=CSP->TRAKNO;
  762.         if ( CddevSw ){        //0: SCSI直接 1:計測IOCTRL
  763.             cdd_ioctrl(0x8004,buf);
  764.             fprintf_(1,") : (%2,%2",buf[0],buf[1]);
  765.         }
  766.         fprintf_(1,") : track=%2(%2) : time=%2:%2:%2",
  767.             plyinf.track_no&0xFFFF,
  768.             j,
  769.                (plyinf.time>>16)&0xFF ,
  770.             m=((plyinf.time>>8 )&0xFF) ,
  771.                 plyinf.time     &0xFF
  772.         );
  773.         if ( om!=m ){
  774.             om=m;
  775.             j=Time100();
  776.             i=ott-j;
  777.             ott=j;
  778.             if ( i<0 ) i+=6000;
  779.             fprintf_(1," : (%4 1/100s)",i);
  780.         }
  781.         od_fg  = plyinf.fg;
  782.         od_trk = plyinf.track_no;
  783.         od_tim = plyinf.time;
  784.     }
  785.     fprintf_(1,"\r\n");
  786. }
  787. }
  788. asm("
  789. _Time100:
  790.     suba.l    a1,a1
  791.     moveq        #$81,d0
  792.     trap        #15
  793.     move.w    $09CC.w,d1    *今の1/100s
  794.     move.l    d0,a1
  795.     moveq        #$81,d0
  796.     trap        #15
  797.     moveq    #0,d0
  798.     move.w    d1,d0
  799.     rts
  800. ");
  801. /***********************************
  802.     'SCSI-ID= '表示
  803. *************************************/
  804. void    PrintScsiId()
  805. {
  806. //    fprintf_(1," SCSI-ID=%2",SCSI_ID );
  807. if ( SCSI_LUN__==0 )
  808.     fprintf_(1," SCSI-ID=%2",SCSI_ID );
  809. else    fprintf_(1," SCSI-ID=%2 LUN=%2",SCSI_ID,SCSI_LUN__ );
  810. }
  811. /**********************************
  812.     名前計算
  813. **********************************/
  814. UNchar    *NameCenter(na,tt)
  815. UNchar    *na;
  816. int    tt;
  817. {
  818. #define jstrlen_(SR)                                \
  819. ({     char *st_=(SR);    int l_=0,c_;                        \
  820.     while( c_=*(st_++) ){                            \
  821.         l_++;                                \
  822.         if ( (c_>=0x80&&c_<=0x9f)||c_>=0xE0 ){                \
  823.             if ( c_>0x80 && c_<0xF0 )                \
  824.                 l_++;                        \
  825.             st_++;                            \
  826.         }                                \
  827.     } (l_);                                    \
  828. })
  829. int    i,l,c,s;
  830. static UNchar buf[64];
  831. UNchar    *ac=buf;
  832. i=0;
  833. if ( (tt&0x10000000)!=0 )
  834.     s=TitleTy[(tt/0x01000000)&0xF];
  835. else    s=CdName[0];
  836. if ( s!=' ' ){    // CD名
  837.     l=jstrlen_(na);
  838.     for(;i<(36-l)/2;i++)
  839.         *ac++=0x20;
  840. }
  841. for(;i<36;){
  842.     c=*na++;
  843.     if ( c==0 )
  844.         break;
  845.     i++;
  846.     *ac++=c;
  847.     if ( (c>=0x80 && c<=0x9f) || c>=0xE0 ){
  848.         i++;
  849.         *ac++=*na++;
  850.     }
  851. }
  852. for(;i<36;i++)
  853.     *ac++=0x20;
  854. *ac=0;
  855. return(buf);
  856. }
  857. /****************************************
  858.    現在の状態と演奏曲数を表示する。
  859. *****************************************/
  860. void    cd_play_inf( void )
  861. {
  862. int    i,j,t,dumy;
  863. int    leadout_address,min,max,start,end,cnt;
  864. char    *s;
  865. if ( CDRM_CHK() )
  866.     return;
  867. min=1;
  868. max=CdTrak;
  869. leadout_address=CdLong;
  870. if ( CdTrak<100 )
  871.     s=" 曲番号は、%2 ~ %2 まで有効です。\r\n";
  872. else    s=" 曲番号は、%2 ~ %3 まで有効です。\r\n";
  873. fprintf_(1,s,min,max );
  874. if( ChkPly( &plyinf )!=0 ){
  875.     if( ChkPly( &plyinf )!=0 ){
  876.         //fprintf_(1,"  Read Drive Status Command error.\r\n");
  877.         //return;
  878.         plyinf.fg=0x13;
  879.     }
  880. }
  881. if ( CDIN && CdLong && CdName[0] ){
  882.     fprintf_(1,"  CD NAME [");
  883.     fprintf_(1,NameCenter(CdName,0));
  884.     fprintf_(1,"]\r\n");
  885.     ChkPlyDisp();
  886. }
  887. i=plyinf.fg;
  888. if ( i==0x12 || i==0x11 ){    //12=中断 11=演奏
  889.     t=(plyinf.track_no&0xFFFF);
  890.     if ( CDIN && CdLong && (*pListName)[t][0] ){
  891.         if ( t<100 )
  892.             fprintf_(1,"  %2 曲目 [",t);
  893.         else    fprintf_(1," %3 曲目 [",t);
  894.         fprintf_(1,NameCenter(NamePoint(t,plyinf.time)),(*pListStTm)[t] );    // 名前
  895.         fprintf_(1,"] の\r\n\t\t%2分%2秒%2",
  896.             (plyinf.time>>16)&0xFF ,
  897.             (plyinf.time>>8 )&0xFF ,
  898.              plyinf.time&0xFF    //DIVU(MULU( plyinf.time&0xFF,99),74)
  899.         );
  900.     } else {
  901.         if ( t<100 )
  902.             fprintf_(1,"  %2 曲目",t);
  903.         else    fprintf_(1," %3 曲目",t);
  904.         fprintf_(1,"の %2分%2秒%2",
  905.             (plyinf.time>>16)&0xFF ,
  906.             (plyinf.time>>8 )&0xFF ,
  907.              plyinf.time&0xFF    //DIVU(MULU( plyinf.time&0xFF,99),74)
  908.         );
  909.     }
  910.     if ( i==0x12 )
  911.         fprintf_(1," で中断しています。");
  912.     else    fprintf_(1," を演奏中です。");
  913.     start = (*pListStTm)[t]&0xFFFFFF;    // スタート時間
  914.     if( t==max )
  915.         end = subtime( leadout_address,1 );
  916.     else    end = subtime( (*pListStTm)[t+1],1 );
  917.     cnt = subtime( end,subtime( start,1 ) );
  918.     fprintf_(1,"[演奏時間  %2分%2秒%2]\r\n",
  919.         ( cnt >>16)&0xFF,
  920.         ( cnt >> 8)&0xFF,
  921.           cnt&0xFF            //DIVU(MULU( cnt&0xFF,99),74)
  922.     );
  923. } else {
  924.     /* 演奏していない。*/
  925. }
  926. }
  927. /***********************************
  928.     CDC が常駐していたら
  929.     演奏停止(trapによる)
  930. *********************************/
  931. void    CdcPlayStopTrap()
  932. {
  933. if ( CDC_CHK()!=0 )
  934.     CDC_INIT();
  935. }
  936. /************************************
  937.     ステレオ,モノラルチェック
  938. [戻り値] MONO なら -1
  939. ************************************/
  940. int    ChkStMono()
  941. {
  942. #define CDROMPage    0x0e    // modesense/selectの時のページ
  943. #define MDDATAPage    0x21    // modesense/selectの時のページ
  944.  
  945. #define SD_CURRENT    0x00    // sense data current
  946. #define SD_CHANGE    0x40    // sense data changeable
  947. #define SD_DEFAULT    0x80    // sense data defualt
  948. #define SD_SAVE        0xc0    // sense data saveable
  949.  
  950. UNchar    buf[16+12];
  951. int    pg;
  952. pg=( DeviType!=0x10 )? CDROMPage : MDDATAPage;
  953. if ( scsi_modesense( pg|SD_CURRENT,16+12,SCSI_IDF,buf )!=0 )
  954.     if ( scsi_modesense( pg|SD_CURRENT,16+12,SCSI_IDF,buf )!=0 )
  955.         return(0);
  956. if ( (buf[8+12]&3)==3 && (buf[10+12]&3)==3 )
  957.     return(-1);
  958. return(0);
  959. }
  960. /************************************
  961.     非常駐対策 MODESELECT 
  962. ************************************/
  963. void    NoStMDS()
  964. {
  965. UNchar    buf[16+12];
  966. int    i,j,r,pg;
  967. pg=( DeviType!=0x10 )? CDROMPage : MDDATAPage;
  968. if ( scsi_modesense( pg|SD_CURRENT,16+12,SCSI_IDF,buf )<0 )
  969.     return;
  970. buf[2+12]=4;
  971. buf[8]= buf[9]= buf[10]= buf[11]= 0;
  972. scsi_modeselect(0x10,16+4,SCSI_IDF,&buf[8]);
  973. }
  974. /***********************************
  975.     ステイタス表示
  976. *************************************/
  977. void    PrintStai()
  978. {
  979.     fprintf_(1,"\r\n");
  980.  
  981.  
  982. if ( ST_CHK==0 ){
  983.     fprintf_(1," CDC.x は常駐していません。\r\n");
  984.     return;
  985. }
  986.  
  987.  
  988. // ハード関係
  989. if ( SCSI_BANKID<0 ){
  990.     fprintf_(1," SCSI-ID= %2 ",SCSI_ID);
  991. } else {
  992.     if ( SCSI_IDSW==0 )
  993.         fprintf_(1," SCSI-ID= %2,%2 ",SCSI_ID,SCSI_BANKID);
  994.     else    fprintf_(1," SCSI-ID= %2,%2 ",SCSI_BANKID,SCSI_ID);
  995. }
  996. if ( JukeBox==0 && LUN_MAX==0 && SCSI_LUN__!=0 && SWPD==0 )
  997.     fprintf_(1,",LUN= %1 ",SCSI_LUN__);
  998. if ( SWPD )        //PDモード
  999.     fprintf_(1,"の PD-DRIVE");
  1000. else if ( DeviType==0x05 )
  1001.     fprintf_(1,"の CD-ROM");
  1002. else if ( DeviType==0x10 )
  1003.     fprintf_(1,"の MD-DATA");
  1004. else    fprintf_(1,"の CD-ROM(CD-R)");
  1005.  
  1006. fprintf_(1," を使用しています。\r\n");
  1007. if ( TwsFlg!=-2 ){        // TWOSCSI フラグ -2 なら PHASE 気を付ける
  1008.     if ( SCSI_ROMB==0xEA0000 )
  1009.         fprintf_(1," I/O スロットの SCSIボードを使用しています。\r\n");
  1010.     else if ( SCSI_ROMB==0xE96020 )
  1011.         fprintf_(1," 内蔵SCSIインターフェイスを使用しています。\r\n");
  1012.     else if ( SCSI_ROMB==0xFFF000 )
  1013.         fprintf_(1," Mach-2 を使用しています。\r\n");
  1014. } else {
  1015.     fprintf_(1," TWOSCSI を使用しています。\r\n");
  1016. }
  1017.  
  1018.     fprintf_(1,"\r\n");
  1019.  
  1020. //スイッチ関係
  1021. fprintf_(1," 管理トラックを%4個確保しています( /W[n] )。\r\n",CdcTrak);
  1022. if ( CddevSw )        //0: SCSI直接 1:計測IOCTRL
  1023.     fprintf_(1," 計測技研DOS-CALLを使用しています( /Z )。\r\n");
  1024. if ( LUN_MAX )        //多連装モード
  1025.     fprintf_(1," %1連装CD-ROMモードで使用しています( /LM%1 )。\r\n",LUN_MAX,LUN_MAX);
  1026. if ( SWPD )        //PDモード
  1027.     fprintf_(1," PD-DRIVEモードで使用しています( /PD )。\r\n");
  1028. if ( PLAYSCSTS!=0 )
  1029.     fprintf_(1," 演奏時の固まりを回避します( /PM )。\r\n");
  1030. if ( PLAYSCCAL!=0 )
  1031.     fprintf_(1," 演奏中、極力 SCSI コールを使いません( /PS )。\r\n");
  1032. if ( TestunitSw==1 )        // /uモード
  1033.     fprintf_(1," 演奏中はメディア未挿入状態にします( /U )。\r\n");
  1034. if ( TestunitSw==-1 )        // /uモード
  1035.     fprintf_(1," 音楽のみのメディアの場合、未挿入状態にします( /UA )。\r\n");
  1036.  
  1037. if ( MuTmMod )        //  0:ノーマル 1:強引にキーベクタを書き替え
  1038.     fprintf_(1," 強引にキーベクタをフックします( /MU )。\r\n");
  1039. if ( STFLAG&1 )
  1040.     fprintf_(1," TRAP #5が使用出来ます。\r\n");
  1041. else    fprintf_(1," TRAP #5が使用出来ません( /TR )。\r\n");
  1042. if ( STFLAG&2 )
  1043.     fprintf_(1," 本体PowerOff時、CD-ROMの演奏を停止させます( /PW )。\r\n");
  1044. if ( CmdC_Mod==0 ){
  1045.     ;
  1046. } else if ( CmdC_Mod==1 ){
  1047.     fprintf_(1," フルキーのRETURNキーも演奏キーにします( /B1 )。\r\n");
  1048. } else {
  1049.     fprintf_(1," NUMキー配置のフルキーも対応します( /B2 )。\r\n");
  1050. }
  1051. if ( MastVol!=0 ){
  1052.     fprintf_(1," ボリューム変更に対応します( /VM )。\r\n");
  1053.     fprintf_(1,"   現在のボリューム %2\r\n",DIVU(Volum,5));
  1054. }
  1055. if ( DisMode==0 ){
  1056.     fprintf_(1," LEDは表示していません。( /LED0 )\r\n");
  1057. } else if ( DisMode==2 ){
  1058.     fprintf_(1," LEDは小さく表示しています。( /LED2 )\r\n");
  1059. }
  1060.  
  1061. //タイミング関係
  1062. fprintf_(1," %4(1/100s)の間隔で割り込みしています",NoPlWitT);
  1063. if ( NoPlWitT!=KeyTDCT )
  1064.     fprintf_(1,"。\r\n   演奏中は%4(1/100s)の間隔で割り込みします",KeyTDCT);
  1065. if ( PlyWitT!=KeyTDCT )
  1066.     fprintf_(1,"。\r\n   演奏直後は%4(1/100s)の間隔で割り込みします",PlyWitT);
  1067. if ( NoPlWitT!=KeyTDCT )
  1068.     fprintf_(1,"( /T%4,%4,%4 )。\r\n",KeyTDCT,PlyWitT,NoPlWitT);
  1069. else if ( PlyWitT!=KeyTDCT )
  1070.     fprintf_(1,"( /T%4,%4 )。\r\n",KeyTDCT,PlyWitT);
  1071. else    fprintf_(1,"( /T%4 )。\r\n",KeyTDCT);
  1072.  
  1073. if ( DiSwc!=0 )
  1074.     fprintf_(1," SCSI-CMD中、他の割り込みは止めています( /DI1 )。\r\n");
  1075. //if ( DiSwc_!=0 )
  1076. //    fprintf_(1," キーベクタがフックされているので SCSI-CMD中、他の割り込みは止めています。\r\n");
  1077.  
  1078.     fprintf_(1,"\r\n");
  1079.  
  1080. if ( CdcMode==0 ){        // 0:停止中 1:運転中
  1081.     fprintf_(1," CDC.xの機能は停止しています。\r\n\r\n");
  1082.     return;
  1083. }
  1084. if ( CDIN==0 ){        //0:CDは入っていない 1:入っている
  1085.     fprintf_(1," メディアは未挿入です。\r\n\r\n");
  1086.     return;
  1087. }
  1088.  
  1089. cd_play_inf();
  1090.  
  1091.     fprintf_(1,"\r\n");
  1092.  
  1093. //タイトルリスト関係
  1094. if ( CdListS==0 )        //CDLISTにあるなら 1 
  1095.     fprintf_(1," このメディアはタイトルリストに登録されていません。\r\n");
  1096. if ( ExTrak )        //1;拡張トラックあり
  1097.     fprintf_(1," 拡張トラックが使用されています。\r\n");
  1098. if ( CeTrak )        //1;中間曲名あり
  1099.     fprintf_(1," 中間曲名が使用されています。\r\n");
  1100. if ( MD_SeqSecTrak )        // 1;MD セパレートトラック有り
  1101.     fprintf_(1," セクタが連続していないトラックがあります。\r\n");
  1102. if ( MD_MonoTrak<0 )        // -1;MONOトラックのみ
  1103.     fprintf_(1," モノラル録音されています。\r\n");
  1104. else if ( MD_MonoTrak>0 )    // 1;有り(禁止)
  1105.     fprintf_(1," ステレオ録音とモノラル録音が混合されています。未対応です。\r\n");
  1106.  
  1107. if ( OvTrak )        //1;トラックが足りなかった
  1108.     fprintf_(1," 管理トラックが足りてません( /W[n]で拡張出来ます )。\r\n");
  1109.  
  1110.     if ( CdListS==0 || ExTrak || CeTrak || OvTrak )
  1111.         fprintf_(1,"\r\n");
  1112.  
  1113. // 動作モード
  1114. if ( AutoMode )        // 0:ノーマル 1:オート(含loop)
  1115.     fprintf_(1," オートモードで運転中です。\r\n");
  1116. if ( RndMode )        // 0:ノーマル 1:ランダム
  1117.     fprintf_(1," ランダムモードで運転中です。\r\n");
  1118. if ( ReptMode )        // 0:ノーマル 1:リピート
  1119.     fprintf_(1," リピートモードで運転中です。\r\n");
  1120. if ( BgmMode )        // 0:ノーマル 1:BGM
  1121.     fprintf_(1," BGMモードで運転中です。\r\n");
  1122. if ( MemLong )        // 0:ノーマル 1:メモリ
  1123.     fprintf_(1," プログラムが %3個されています。\r\n",MemLong);
  1124. if ( JukeBox )
  1125.     fprintf_(1," ジュークボックスモードです。\r\n");
  1126. if ( ChkStMono() )
  1127.     fprintf_(1," モノラル演奏しています。\r\n");
  1128.  
  1129. fprintf_(1,"\r\n");
  1130.  
  1131. }
  1132.